import { loginsub } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
import router from '@/router';
import { twoconstantRoutes , constantRoutes,threeconstantRoutes} from '@/router';
// jwt解析工具
import jwt from 'jsonwebtoken';
import { Message } from 'element-ui';
const state ={
  // 初始化token
  token:getToken(),
  // 管理员和用户资料
  // 本地化储存放置页面数据刷新丢失
  userInfo:JSON.parse(sessionStorage.getItem('adminname')) || {},
}
if (Object.keys(state.userInfo).length === 0) {
  // 执行退出登录的操作
  state.token = null
}
const mutations ={
  // 设置token
  setToken(state,token){
    state.token = token
    // 储存token
    setToken(token)  // vuex和 缓存数据的同步
  },
  // 删除token
  removeToken(state){
    state.token = null //删除vuex中的token
    removeToken() // 先清除 vuex  再清除缓存 vuex和 缓存数据的同步
  },
  // 设置用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = {...userInfo} // 用 浅拷贝的方式去赋值对象 因为这样数据更新之后，才会触发组件的更新
    sessionStorage.setItem('adminname',JSON.stringify({...userInfo}))
  },
  // 删除用户信息
  reomveUserInfo(state) {
    state.userInfo = {}
  },
}
// 执行异步
const actions = {
  // 定义login action  也需要参数 调用action时 传递过来的参数
  async login(context, data) {
    const result = await loginsub(data) // result就是执行的结果
    console.log(result);  //token
    // axios默认给数据加了一层data
    if (result.data.state=='20000') {
      // 解析jwt数据获取用户名
    const decoded = jwt.decode(result.data.data)
    console.log(decoded);
    //  console.log(router.options.routes);
     // 保存路由数组到localStorage
     if(decoded.id===2){
         router.options.routes = twoconstantRoutes
      localStorage.setItem('assignedRoutestwo', JSON.stringify(router.options.routes));

     }else if(decoded.id===1){
      router.options.routes = constantRoutes
      localStorage.setItem('assignedRoutesone', JSON.stringify(router.options.routes));
     }else if(decoded.id===3){
      router.options.routes = threeconstantRoutes
      localStorage.setItem('assignedRoutesthree', JSON.stringify(router.options.routes));
     }
    // 将分配的路由保存到本地存储
    localStorage.setItem('assignedRoutes', JSON.stringify(router.options.routes));
     context.commit('setUserInfo',decoded) //解析后的jwt
     context.commit('setToken', result.data.data)   
     Message.success('登录成功')
    }
  },
  // 登出的action
  logout(context) {
    // 删除token
    context.commit('removeToken') // 不仅仅删除了vuex中的 还删除了缓存中的
    // 删除用户资料
    context.commit('reomveUserInfo') // 删除用户信息
    // resetRouter()
    // localStorage.setItem('isLoggedOut', true);
  },
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}